package com.yuyu.commons.factory;

import cn.hutool.core.map.MapUtil;
import com.yuyu.commons.toolKit.ApplicationUtils;

import java.util.Collection;
import java.util.Map;

/**
 * @author
 * @version 1.0
 * @description: 仓储工厂用来统一获取仓储实现
 * @date 2022/8/2 16:53
 */
public class RepositoryFactory {

    /**
     * 根据仓储接口类型获取对应实现且默认取值第一个
     *
     * @param tClass 目标仓储接口类型
     * @param <T>    目标类型
     * @return 如果不是指定实现，默认获得第一个实现Bean
     */
      public static <T> T get(Class<? extends T> tClass){
          Map<String, ? extends T> beansOfType = ApplicationUtils.getContext().getBeansOfType(tClass);
          if (MapUtil.isNotEmpty(beansOfType)){
              Collection<? extends T> values = beansOfType.values();
              return values.stream().findFirst().get();
          }
          throw new RuntimeException("未找到仓储接口或其指定的实现:" + tClass.getSimpleName());

      }
}
